Introduce tf_vprintf() and tf_string_print()
authorSoby Mathew <soby.mathew@arm.com>
Mon, 4 Sep 2017 10:45:52 +0000 (11:45 +0100)
committerSoby Mathew <soby.mathew@arm.com>
Mon, 11 Sep 2017 14:35:41 +0000 (15:35 +0100)
This patch introduces tf_vprintf() and tf_string_print() APIs
which is needed by the logging framework introduced in a later
patch.

Change-Id: Ie4240443d0e04e070502b51e371e546dd469fd33
Signed-off-by: Soby Mathew <soby.mathew@arm.com>
common/tf_printf.c
include/common/debug.h

index c18e2f9907495b447bf79a47a7252ab4afe7f29f..f73842acd351e3eaee5101b479bad22dab1a7829 100644 (file)
        (((lcount) > 1) ? va_arg(args, unsigned long long int) :        \
        ((lcount) ? va_arg(args, unsigned long int) : va_arg(args, unsigned int)))
 
-static void string_print(const char *str)
+void tf_string_print(const char *str)
 {
+       assert(str);
+
        while (*str)
                putchar(*str++);
 }
@@ -64,15 +66,13 @@ static void unsigned_num_print(unsigned long long int unum, unsigned int radix)
  * The print exits on all other formats specifiers other than valid
  * combinations of the above specifiers.
  *******************************************************************/
-void tf_printf(const char *fmt, ...)
+void tf_vprintf(const char *fmt, va_list args)
 {
-       va_list args;
        int l_count;
        long long int num;
        unsigned long long int unum;
        char *str;
 
-       va_start(args, fmt);
        while (*fmt) {
                l_count = 0;
 
@@ -94,12 +94,12 @@ loop:
                                break;
                        case 's':
                                str = va_arg(args, char *);
-                               string_print(str);
+                               tf_string_print(str);
                                break;
                        case 'p':
                                unum = (uintptr_t)va_arg(args, void *);
                                if (unum)
-                                       string_print("0x");
+                                       tf_string_print("0x");
 
                                unsigned_num_print(unum, 16);
                                break;
@@ -123,13 +123,20 @@ loop:
                                break;
                        default:
                                /* Exit on any other format specifier */
-                               goto exit;
+                               return;
                        }
                        fmt++;
                        continue;
                }
                putchar(*fmt++);
        }
-exit:
-       va_end(args);
+}
+
+void tf_printf(const char *fmt, ...)
+{
+       va_list va;
+
+       va_start(va, fmt);
+       tf_vprintf(fmt, va);
+       va_end(va);
 }
index 814cf8402a19f0019ffa0adf51d1fe35890ef1ad..b8582419a334419b12dd2f788201f0c3e6c08cd0 100644 (file)
@@ -24,6 +24,7 @@
 #define LOG_LEVEL_VERBOSE              50
 
 #ifndef __ASSEMBLY__
+#include <stdarg.h>
 #include <stdio.h>
 
 #if LOG_LEVEL >= LOG_LEVEL_NOTICE
@@ -65,6 +66,8 @@ void __dead2 __stack_chk_fail(void);
 
 void tf_printf(const char *fmt, ...) __printflike(1, 2);
 int tf_snprintf(char *s, size_t n, const char *fmt, ...) __printflike(3, 4);
+void tf_vprintf(const char *fmt, va_list args);
+void tf_string_print(const char *str);
 
 #endif /* __ASSEMBLY__ */
 #endif /* __DEBUG_H__ */